"""
进程之间不能共享全局变量
"""
from multiprocessing import Process
from time import sleep

# 定义一个list集合让两个进程去使用它，观察效果
mylist = list() #=> []

def addList():
    for i in range(5):
        mylist.append(i)
        print("add:"+str(i))
        sleep(0.2)
    print(f"添加完成：{mylist}")

def readList():
    for i in mylist:
        print("读取到数据："+str(i))
        sleep(0.2)

"""
注意事项：对于mac和linux来说，创建子进程的时候，主进程的代码不会进行拷贝，
        但是对于win来说，创建子进程的时候会把主进程的代码拷贝，拷贝主进程的代码的时候
        主进程的代码中又有创建子进程的操作，就会这样一直循环，直接会报错
        
解决方法: 添加if __name__ == '__main__': （快捷方式，输入一个main）
        通过判断是否是主模块，如果不是主模块，就不拷贝主进程的代码了 

理解主模块：直接执行的模块就是主模块，那么直接执行的代码中就要有判断主模块的代码
        if __name__ == '__main__'
    这样做有两个好处：
    1 防止别人导入我的模块的时候执行main里面的代码
    2 防止windows递归创建子进程
"""

if __name__ == '__main__':
    #线程1 用于向列表中添加数据
    process1 = Process(target=addList)
    process1.start()
    process1.join() # 主进程会等待进程process1执行完毕再向下执行

    #线程2 用于读取mylist中的数据 会发现读取不到任何数据
    process2 = Process(target=readList)
    process2.start()

    # process2 读取不到任何数据，因此线程之间是不共享数据的
    # 其实就是java里面的，各个进程拿到的是全局变量的副本，各个进程操作的是自己的副本



